perm filename UDPCHK.FAI[KID,KMC] blob sn#122911 filedate 1974-11-15 generic text, type T, neo UTF8
TITLE UDPCHK
;THIS PROGRAM GENERATES 2 FILES:- [  UDPFIL.INT   AND   UDPFIL.TON   ];
;THE PURPOSE OF THESE FILES IS TO CHECK THE UDPFIL PROGRAM.

;THE FILE  UDPFIL.INT  IS JUST THE INTEGERS FROM  0 TO 20000.
;THE FILE  UDPFIL.TON  IS A SEQUENCE WHICH SHOULD PLAY BACK AS A TONE.

INTFIL:	SIXBIT	/UDPFIL/
	SIXBIT	/INT/
	0
	0

TONFIL:	SIXBIT	/UDPFIL/
	SIXBIT	/TON/
	0
	0

PDL:	BLOCK	11
DIOWD:	IOWD	200,BUFFER
	0
BUFFER:	BLOCK	200

DSKCHN←←15

A←1
B←2
C←3
D←4
P←7
X←10
Y←11

START:	INIT	DSKCHN,17	;INIT DISK IN DUMP MODE.
	SIXBIT	/DSK/
	0
	JRST	[OUTSTR [ASCIZ /I DIE/]
		HALT]

	MOVE	P,[IOWD	7,PDL]

DOINT:	ENTER	DSKCHN,INTFIL	;CREATE A FILE
	JRST	[OUTSTR [ASCIZ /RAID IT IF IT REPEATS/]
		HALT]

	SETZM	BUFFER
	MOVEI	0,BUFFER+1
	HRLI	0,BUFFER
	BLT	0,BUFFER+200
	MOVEI	0,40000
	MOVEM	0,BUFFER
	OUTPUT	DSKCHN,DIOWD

	MOVEI	X,0
	MOVEI	A,200		;WILL COUNT BUFFERS-FULL
DOIL1:	MOVEI	B,200		;WILL COUNT WORDS IN BUFFER.
	MOVEI	C,0
DOIL2:	PUSHJ	P,NXTINT	;GET NEXT INTEGER IN D.
	MOVEM	D,BUFFER(C)
	AOJ	C,		;BUMP THE WORD POINTER.
	SOJN	B,DOIL2		;LOOP UNTIL B=0
	OUTPUT	DSKCHN,DIOWD	;WRITE THE BUFFER
	SOJN	A,DOIL1		;LOOP UNTIL A=0

	CLOSE	DSKCHN,0	;UDPFIL.INT IS COMPLETE

DOTON:	ENTER	DSKCHN,TONFIL	;CREATE A FILE
	JRST	[OUTSTR [ASCIZ /RAID IT IF IT REPEATS/]
		HALT]

	SETZM	BUFFER
	MOVEI	0,BUFFER+1
	HRLI	0,BUFFER
	BLT	0,BUFFER+200
	MOVEI	0,100000
	MOVEM	0,BUFFER
	OUTPUT	DSKCHN,DIOWD

	MOVEI	X,0
	MOVEI	Y,0
	MOVEI	A,400		;WILL COUNT BUFFERS-FULL
DOTL1:	MOVEI	B,200		;WILL COUNT WORDS IN BUFFER.
	MOVEI	C,0
DOTL2:	PUSHJ	P,NXTNOT	;GET NEXT NOTE IN D.
	MOVEM	D,BUFFER(C)
	AOJ	C,		;BUMP THE WORD POINTER.
	SOJN	B,DOTL2		;LOOP UNTIL B=0
	OUTPUT	DSKCHN,DIOWD	;WRITE THE BUFFER
	SOJN	A,DOTL1		;LOOP UNTIL A=0

	CLOSE	DSKCHN,0	;UDPFIL.TON IS COMPLETE

	RELEAS	DSKCHN,0	;NO MORE I/O
	CALL	[SIXBIT	/EXIT/]


NXTINT:	;ROUTINE TO GET THE NEXT INTEGER.
	MOVE	D,X
	AOJ	X,
	POPJ	P,

NXTNOT:	;ROUTINE TO GET THE NEXT NOTE OF A TONE.
	JUMPE	X,NOTL5		;JUMP IF X=0
NOTL1:	;NOTES HAVE BEEN NEGATIVE TO HERE.
	JUMPLE	Y,NOTL2		;JUMP IF END OF NEGATIVE NOTES.
	MOVE	D,NEGNOT	;RESULT IS A NEGATIVE NOTE.
	SOJ	Y,
	POPJ	P,

NOTL2:	;END OF NEGATIVE NOTES.
	MOVE	D,UPSLOP	;THE RISING CROSSING SEQUENCE.
	MOVEI	Y,=17		;WILL NEXT DO 51 POSITIVE NOTES.
	MOVEI	X,0		;NOW WE ARE IN THE POSITIVE SEQUENCE.
	POPJ	P,

NOTL5:	;NOTES HAVE BEEN POSITIVE TO HERE.
	JUMPLE	Y,NOTL6		;JUMP IF END OF POSITIVE NOTES.
	MOVE	D,POSNOT	;RESULT IS A POSITIVE NOTE.
	SOJ	Y,
	POPJ	P,

NOTL6:	;END OF POSITIVE NOTES.
	MOVE	D,DNSLOP	;THE FALLING CROSSING SEQUENCE.
	MOVEI	Y,=17		;WILL NEXT DO 51 NEGATIVE NOTES.
	MOVEI	X,1		;NOW WE ARE IN THE NEGATIVE SEQUENCE.
	POPJ	P,

NEGNOT:	700070007000
POSNOT:	077707770777
UPSLOP:	740000000377
DNSLOP:	037700007400

END START